package com.company.calendar.controller;

import com.company.calendar.dto.CompanyDTO;
import com.company.calendar.service.CompanyService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import jakarta.validation.Valid;
import java.util.List;
import java.util.Optional;

/**
 * 公司控制器
 * 
 * @author System
 * @since 1.0.0
 */
@RestController
@RequestMapping("/companies")
@RequiredArgsConstructor
@Slf4j
public class CompanyController {
    
    private final CompanyService companyService;
    
    /**
     * 创建公司
     * 
     * @param companyDTO 公司DTO
     * @return 创建结果
     */
    @PostMapping
    public ResponseEntity<CompanyDTO> createCompany(@Valid @RequestBody CompanyDTO companyDTO) {
        log.info("创建公司: {}", companyDTO.getCompanyName());
        CompanyDTO result = companyService.createCompany(companyDTO);
        return ResponseEntity.ok(result);
    }
    
    /**
     * 根据ID获取公司信息
     * 
     * @param id 公司ID
     * @return 公司信息
     */
    @GetMapping("/{id}")
    public ResponseEntity<CompanyDTO> getCompanyById(@PathVariable Long id) {
        Optional<CompanyDTO> company = companyService.getCompanyById(id);
        return company.map(ResponseEntity::ok)
                .orElse(ResponseEntity.notFound().build());
    }
    
    /**
     * 根据公司编码获取公司信息
     * 
     * @param companyCode 公司编码
     * @return 公司信息
     */
    @GetMapping("/code/{companyCode}")
    public ResponseEntity<CompanyDTO> getCompanyByCode(@PathVariable String companyCode) {
        Optional<CompanyDTO> company = companyService.getCompanyByCode(companyCode);
        return company.map(ResponseEntity::ok)
                .orElse(ResponseEntity.notFound().build());
    }
    
    /**
     * 获取所有公司
     * 
     * @return 公司列表
     */
    @GetMapping
    public ResponseEntity<List<CompanyDTO>> getAllCompanies() {
        List<CompanyDTO> companies = companyService.getAllCompanies();
        return ResponseEntity.ok(companies);
    }
    
    /**
     * 根据公司名称搜索公司
     * 
     * @param name 公司名称
     * @return 公司列表
     */
    @GetMapping("/search")
    public ResponseEntity<List<CompanyDTO>> searchCompanies(@RequestParam String name) {
        List<CompanyDTO> companies = companyService.searchCompaniesByName(name);
        return ResponseEntity.ok(companies);
    }
    
    /**
     * 更新公司信息
     * 
     * @param id 公司ID
     * @param companyDTO 公司DTO
     * @return 更新结果
     */
    @PutMapping("/{id}")
    public ResponseEntity<CompanyDTO> updateCompany(@PathVariable Long id, 
                                                   @Valid @RequestBody CompanyDTO companyDTO) {
        log.info("更新公司信息: {}", id);
        CompanyDTO result = companyService.updateCompany(id, companyDTO);
        return ResponseEntity.ok(result);
    }
    
    /**
     * 删除公司
     * 
     * @param id 公司ID
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteCompany(@PathVariable Long id) {
        log.info("删除公司: {}", id);
        companyService.deleteCompany(id);
        return ResponseEntity.ok().build();
    }
}


